package com.persion.utils;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import com.persion.common.exception.UtilException;

/**
 * 邮箱工具类
 *
 * @author WangFK
 * @version 1.0
 * @since 2023/5/11 14:52
 */
public class MailUtil {
    /**
     *         <dependency>
     *             <groupId>com.sun.mail</groupId>
     *             <artifactId>javax.mail</artifactId>
     *             <version>1.6.2</version>
     *         </dependency>
     */

    /**
     * 邮箱正则
     */
    public static final String EMAIL_REGEX = "^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$";
    /**
     * 是否是无效邮箱格式
     * @param email 要校验的邮箱
     * @return true:符合，false：不符合
     */
    public static boolean isEmailInvalid(String email){
        if (ObjectUtil.isEmpty(email)){
            return false;
        }
        return ReUtil.isMatch(EMAIL_REGEX, email);
    }
    /**
     * 发送普通文本邮件
     * @param email    接受人邮箱
     * @param subject  主题
     * @param content  内容
     * @return
     */
    public static void sendText(String email,String subject,String content){
        try {
            if (!isEmailInvalid(email)){
                throw new UtilException("邮箱格式不正确");
            }
            cn.hutool.extra.mail.MailUtil.send(email,subject,content,false);
        } catch (Exception e) {
            throw new UtilException("邮箱发送失败");
        }
    }
    /**
     * 发送html邮件
     * @param email    接受人邮箱
     * @param subject  主题
     * @param content  内容
     * @return
     */
    public static void sendHtml(String email,String subject,String content){
        try {
            if (!isEmailInvalid(email)){
                throw new UtilException("邮箱格式不正确");
            }
            cn.hutool.extra.mail.MailUtil.send(email,subject,content,true);
        } catch (Exception e) {
            throw new UtilException("邮箱发送失败");
        }
    }

    /**
     * 发送html邮件 默认失效时间5min
     * @param email
     * @param code
     */
    public static void sendHtml(String email,String code){
        sendHtml(email,code,5);
    }

    /**
     * 发送html邮件 设置失效时间
     * @param email
     * @param code
     * @param offset
     */
    public static void sendHtml(String email,String code,Integer offset){
            String subject="Care-Persion官方验证码";
            // 前缀
            String contendFix="<h1>亲爱的用户：您好！</h1>" +
                    "    <p>您收到这封电子邮件是因为您 (也可能是某人冒充您的名义) 注册 <b>Care-Persion</b> 账号。假如这不是您本人所申请, 请不用理会这封电子邮件, 但是如果您持续收到这类的信件骚扰, 请您尽快联络管理员。</p>" +
                    "   <p>请使用以下验证码完成后续注册账号流程</p><h2><b>"  ;
            // 失效时间
            DateTime Timeout = DateUtil.offsetMinute(DateUtil.date(), offset);

            // 后缀
            String suffix="</b></h2>" +"  <p>注意：请您收到邮件的五分钟内（<b>"+Timeout+"</b>）前使用，否则验证码将会失效。</p>";
            // 组合
            String contend = contendFix + code + suffix;
            sendHtml(email,subject,contend);
    }


}
